#include"groupe.h"

Groupe::Groupe(const std::string& nomGrp): nomGrp_(nomGrp)
{}

Groupe::Groupe(const std::string& nomGrp, const EnsEtu& memb): nomGrp_(nomGrp), member_(memb)
{
}

Groupe::Groupe(const std::string& nomGrp, const EnsEtu& memb, const EnsMod& suivi): nomGrp_(nomGrp), member_(memb), suivi_(suivi)
{
}

const std::string Groupe::getNomGroupe() const
{
	return nomGrp_;
}

EnsEtu* Groupe::getEnsEtudiant()
{
	return &member_;
}

EnsMod* Groupe::getEnsModule()
{
	return &suivi_;
}

void Groupe::ajouterModule(Module* mod)
{
	suivi_.insert(mod);
}

void Groupe::affecterEtu(Etudiant* etu)
{
	member_.insert(etu);
}

void Groupe::retirerEtu(Etudiant* etu)
{
	EnsEtu::iterator it = member_.find(etu);
	if(it != member_.end())member_.erase(it);
}

void Groupe::retirerModule(Module* mod)
{
	EnsMod::iterator it = suivi_.find(mod);
	if(it != suivi_.end())suivi_.erase(it);
}

std::ostream& operator<<(std::ostream& os, Groupe* g)
{
	os << "le groupe " << (g->getNomGroupe()) << " est compose de :\n";
	EnsEtu::iterator it;
	EnsEtu lEtu = *g->getEnsEtudiant();
	for(it = lEtu.begin(); it != lEtu.end(); ++it)
	{
		os << "de l'étudiant :\n" << *(*it) << "\n"; 
	}
	
	os << "et suit les modules :\n";
	EnsMod::iterator itmod;
	EnsMod lMod = *g->getEnsModule();
	for(itmod = lMod.begin(); itmod != lMod.end(); ++itmod)
	{
		os << "du module :\n" << *(*itmod);
	}
	return os;
}

bool Groupe::operator <(const Groupe& e) const
{
    return nomGrp_ < e.nomGrp_;
}

bool ComparatorGroupe::operator ()(const Groupe& e1, const Groupe& e2)
{
    return e1<e2;
}

EnsembleGrp::EnsembleGrp()
{
}

void EnsembleGrp::ajoutGroupe(Groupe *ens)
{
    listGroupe_.insert(ens);
}

void EnsembleGrp::ajoutEnsGroupe(ensGroupe eEns)
{
    ensGroupe::iterator itEtu;
    for (itEtu = eEns.begin(); itEtu!= eEns.end(); ++itEtu)
    {
        listGroupe_.insert((*itEtu));
    }
}

ensGroupe EnsembleGrp::getEnsembleGrp()
{
    return listGroupe_;
}

void EnsembleGrp::supprGroupe(Groupe *grp)
{
    listGroupe_.erase(listGroupe_.find(grp));
    delete grp;
}
